#include <iostream>
using namespace std;
//参数类型不同
int Add(int left, int right)//对整数的加法
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}
double Add(double left, double right)//对小数的加法
{
    cout << "double Add(double left, double right)" << endl;
    return left + right;
}
 
 
// 2、参数个数不同
void f()
{
    cout << "f()" << endl;
}
void f(int a)
{
    cout << "f(int a)" << endl;
}
 
// 3、参数类型顺序不同
void f(int a, char b)
{
    cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
    cout << "f(char b, int a)" << endl;
}
 
 
//语法上下面的两个函数构成重载，但是我们在调用的时候就会有歧义了
//我们不知道调用的是哪个
//语法上是可以存在的，但是在实际运用中是不能存在的
void f1()
{
    cout << "f()" << endl;
}
void f1(int a = 10)
{
    cout << "f(int a)" << endl;
}
 
int main()
{
    //下面的两个函数其实是不同的函数
    //参数的类型不同
    Add(10, 20);
    Add(10.1, 20.2);
 
    //参数个数不同
    f();
    f(10);
 
    //参数顺序不同  本质还是类型不同
    f(10, 'a');
    f('a', 10);
    return 0;
}
/*
如果是返回值不同那么能不能构成重载呢？
答案是不能的，因为光凭借这个我们是不能进行判断的
 
但是我们的参数个数以及参数顺序和参数类型不同都能进行判断函数的不同，那么就能进行重载
*/